extends Enemy

# 速度状态枚举，用于控制敌人在不同阶段的速度变化
# DECELERATING_FAST: 快速减速（500-400）
# DECELERATING_MID: 中速减速（400-100）
# DECELERATING_SLOW: 慢速减速（100-0）
# PAUSED: 暂停状态（0）
# ACCELERATING_SLOW: 慢速加速（0-100）
# ACCELERATING_MID: 中速加速（100-400）
# ACCELERATING_FAST: 快速加速（400-500）
enum SpeedState {
    DECELERATING_FAST, # 500-400
    DECELERATING_MID, # 400-100
    DECELERATING_SLOW, # 100-0
    PAUSED, # 0
    ACCELERATING_SLOW, # 0-100
    ACCELERATING_MID, # 100-400
    ACCELERATING_FAST # 400-600
}

# 当前移动速度
var current_speed: float = 500

# 加速度值，影响速度变化速率
var acceleration: float = 0

# 正向加速度增量，用于加速过程中的加速度增长
var add_acceleration: float = 0.2

# 负向加速度增量，用于减速过程中的加速度减少
var minus_acceleration: float = 0.7

# 当前速度状态，决定速度如何变化
var speed_state: SpeedState = SpeedState.DECELERATING_FAST

# 暂停计时器，在暂停状态下使用
var pause_timer: Timer = null

# 初始化函数，设置初始数据和创建暂停计时器
func _ready() -> void:
    super._ready()
    data = Global.enemy_data[5]
    
    # 创建并配置暂停计时器
    pause_timer = Timer.new()
    pause_timer.one_shot = true
    pause_timer.connect("timeout", Callable(self, "_on_pause_timeout"))
    add_child(pause_timer)

# 物理处理函数，每帧更新敌人的位置、速度以及射击逻辑
# 参数 delta: 自上一帧以来经过的时间（秒）
func _physics_process(delta: float) -> void:
    update_speed(delta)
    print("Speed: ", current_speed, " State: ", speed_state) # 添加调试信息
    
    # 计算朝向核心的方向向量，并据此移动敌人
    var speed_direction = - (self.global_position - Global.core_position).normalized()
    if is_move_allow:
        self.global_position += speed_direction * current_speed * delta
        
    # 冷却完毕且允许攻击时进行射击
    if cool_down_done && data["RANGE"] == "TRUE":
        shoot()
        start_cooldown()

# 根据当前速度状态更新速度与加速度
# 参数 delta: 自上一帧以来经过的时间（秒）
func update_speed(delta: float) -> void:
    match speed_state:
        SpeedState.DECELERATING_FAST:
            # 快速减速阶段：从最大速度减到400
            if current_speed > 300:
                acceleration += add_acceleration
                current_speed -= acceleration
            else:
                speed_state = SpeedState.DECELERATING_MID
                
        SpeedState.DECELERATING_MID:
            # 中速减速阶段：从400减到100
            if current_speed > 150:
                current_speed -= acceleration
            else:
                speed_state = SpeedState.DECELERATING_SLOW
                
        SpeedState.DECELERATING_SLOW:
            # 慢速减速阶段：从100逐渐降到0，并进入暂停状态
            if current_speed > 0:
                acceleration -= minus_acceleration
                if acceleration < 10:
                    acceleration = 10
                current_speed -= acceleration
            else:
                current_speed = 0
                speed_state = SpeedState.PAUSED
                pause_timer.start(0.4) # 启动1秒的暂停定时器
                
        SpeedState.PAUSED:
            pass
        SpeedState.ACCELERATING_SLOW:
            # 慢速加速阶段：从0加速到100
            if current_speed < 100:
                acceleration += add_acceleration
                current_speed += acceleration
            else:
                speed_state = SpeedState.ACCELERATING_MID
                
        SpeedState.ACCELERATING_MID:
            # 中速加速阶段：从100加速到400
            if current_speed < 400:
                acceleration += minus_acceleration
                current_speed += acceleration
            else:
                speed_state = SpeedState.ACCELERATING_FAST
                
        SpeedState.ACCELERATING_FAST:
            # 快速加速阶段：从400加速回到原始速度
            if current_speed < data["SPEED"]:
                acceleration += minus_acceleration
                current_speed += acceleration
                if current_speed >= data["SPEED"]:
                    current_speed = data["SPEED"]

# 暂停时间结束后调用此函数，将速度状态设为慢速加速开始恢复运动
func _on_pause_timeout() -> void:
    speed_state = SpeedState.ACCELERATING_SLOW
